package net.bramp.ffmpeg.fixtures;

import com.google.common.collect.ImmutableList;
import net.bramp.ffmpeg.info.PixelFormat;

/**
 * Class that contains all pixel formats as defined in the unit tests This should not be used as a
 * concise list of available pixel formats, as every install of ffmpeg is different. Call
 * ffmpeg.pixelFormats() to discover.
 */
public final class PixelFormats {

  private PixelFormats() {
    throw new AssertionError("No instances for you!");
  }

  public static final ImmutableList<PixelFormat> PIXEL_FORMATS =
      new ImmutableList.Builder<PixelFormat>()
          .add(
              new PixelFormat("yuv420p", 3, 12, "IO..."),
              new PixelFormat("yuyv422", 3, 16, "IO..."),
              new PixelFormat("rgb24", 3, 24, "IO..."),
              new PixelFormat("bgr24", 3, 24, "IO..."),
              new PixelFormat("yuv422p", 3, 16, "IO..."),
              new PixelFormat("yuv444p", 3, 24, "IO..."),
              new PixelFormat("yuv410p", 3, 9, "IO..."),
              new PixelFormat("yuv411p", 3, 12, "IO..."),
              new PixelFormat("gray", 1, 8, "IO..."),
              new PixelFormat("monow", 1, 1, "IO..B"),
              new PixelFormat("monob", 1, 1, "IO..B"),
              new PixelFormat("pal8", 1, 8, "I..P."),
              new PixelFormat("yuvj420p", 3, 12, "IO..."),
              new PixelFormat("yuvj422p", 3, 16, "IO..."),
              new PixelFormat("yuvj444p", 3, 24, "IO..."),
              new PixelFormat("uyvy422", 3, 16, "IO..."),
              new PixelFormat("uyyvyy411", 3, 12, "....."),
              new PixelFormat("bgr8", 3, 8, "IO..."),
              new PixelFormat("bgr4", 3, 4, ".O..B"),
              new PixelFormat("bgr4_byte", 3, 4, "IO..."),
              new PixelFormat("rgb8", 3, 8, "IO..."),
              new PixelFormat("rgb4", 3, 4, ".O..B"),
              new PixelFormat("rgb4_byte", 3, 4, "IO..."),
              new PixelFormat("nv12", 3, 12, "IO..."),
              new PixelFormat("nv21", 3, 12, "IO..."),
              new PixelFormat("argb", 4, 32, "IO..."),
              new PixelFormat("rgba", 4, 32, "IO..."),
              new PixelFormat("abgr", 4, 32, "IO..."),
              new PixelFormat("bgra", 4, 32, "IO..."),
              new PixelFormat("gray16be", 1, 16, "IO..."),
              new PixelFormat("gray16le", 1, 16, "IO..."),
              new PixelFormat("yuv440p", 3, 16, "IO..."),
              new PixelFormat("yuvj440p", 3, 16, "IO..."),
              new PixelFormat("yuva420p", 4, 20, "IO..."),
              new PixelFormat("rgb48be", 3, 48, "IO..."),
              new PixelFormat("rgb48le", 3, 48, "IO..."),
              new PixelFormat("rgb565be", 3, 16, "IO..."),
              new PixelFormat("rgb565le", 3, 16, "IO..."),
              new PixelFormat("rgb555be", 3, 15, "IO..."),
              new PixelFormat("rgb555le", 3, 15, "IO..."),
              new PixelFormat("bgr565be", 3, 16, "IO..."),
              new PixelFormat("bgr565le", 3, 16, "IO..."),
              new PixelFormat("bgr555be", 3, 15, "IO..."),
              new PixelFormat("bgr555le", 3, 15, "IO..."),
              new PixelFormat("vaapi_moco", 0, 0, "..H.."),
              new PixelFormat("vaapi_idct", 0, 0, "..H.."),
              new PixelFormat("vaapi_vld", 0, 0, "..H.."),
              new PixelFormat("yuv420p16le", 3, 24, "IO..."),
              new PixelFormat("yuv420p16be", 3, 24, "IO..."),
              new PixelFormat("yuv422p16le", 3, 32, "IO..."),
              new PixelFormat("yuv422p16be", 3, 32, "IO..."),
              new PixelFormat("yuv444p16le", 3, 48, "IO..."),
              new PixelFormat("yuv444p16be", 3, 48, "IO..."),
              new PixelFormat("dxva2_vld", 0, 0, "..H.."),
              new PixelFormat("rgb444le", 3, 12, "IO..."),
              new PixelFormat("rgb444be", 3, 12, "IO..."),
              new PixelFormat("bgr444le", 3, 12, "IO..."),
              new PixelFormat("bgr444be", 3, 12, "IO..."),
              new PixelFormat("ya8", 2, 16, "IO..."),
              new PixelFormat("bgr48be", 3, 48, "IO..."),
              new PixelFormat("bgr48le", 3, 48, "IO..."),
              new PixelFormat("yuv420p9be", 3, 13, "IO..."),
              new PixelFormat("yuv420p9le", 3, 13, "IO..."),
              new PixelFormat("yuv420p10be", 3, 15, "IO..."),
              new PixelFormat("yuv420p10le", 3, 15, "IO..."),
              new PixelFormat("yuv422p10be", 3, 20, "IO..."),
              new PixelFormat("yuv422p10le", 3, 20, "IO..."),
              new PixelFormat("yuv444p9be", 3, 27, "IO..."),
              new PixelFormat("yuv444p9le", 3, 27, "IO..."),
              new PixelFormat("yuv444p10be", 3, 30, "IO..."),
              new PixelFormat("yuv444p10le", 3, 30, "IO..."),
              new PixelFormat("yuv422p9be", 3, 18, "IO..."),
              new PixelFormat("yuv422p9le", 3, 18, "IO..."),
              new PixelFormat("gbrp", 3, 24, "IO..."),
              new PixelFormat("gbrp9be", 3, 27, "IO..."),
              new PixelFormat("gbrp9le", 3, 27, "IO..."),
              new PixelFormat("gbrp10be", 3, 30, "IO..."),
              new PixelFormat("gbrp10le", 3, 30, "IO..."),
              new PixelFormat("gbrp16be", 3, 48, "IO..."),
              new PixelFormat("gbrp16le", 3, 48, "IO..."),
              new PixelFormat("yuva422p", 4, 24, "IO..."),
              new PixelFormat("yuva444p", 4, 32, "IO..."),
              new PixelFormat("yuva420p9be", 4, 22, "IO..."),
              new PixelFormat("yuva420p9le", 4, 22, "IO..."),
              new PixelFormat("yuva422p9be", 4, 27, "IO..."),
              new PixelFormat("yuva422p9le", 4, 27, "IO..."),
              new PixelFormat("yuva444p9be", 4, 36, "IO..."),
              new PixelFormat("yuva444p9le", 4, 36, "IO..."),
              new PixelFormat("yuva420p10be", 4, 25, "IO..."),
              new PixelFormat("yuva420p10le", 4, 25, "IO..."),
              new PixelFormat("yuva422p10be", 4, 30, "IO..."),
              new PixelFormat("yuva422p10le", 4, 30, "IO..."),
              new PixelFormat("yuva444p10be", 4, 40, "IO..."),
              new PixelFormat("yuva444p10le", 4, 40, "IO..."),
              new PixelFormat("yuva420p16be", 4, 40, "IO..."),
              new PixelFormat("yuva420p16le", 4, 40, "IO..."),
              new PixelFormat("yuva422p16be", 4, 48, "IO..."),
              new PixelFormat("yuva422p16le", 4, 48, "IO..."),
              new PixelFormat("yuva444p16be", 4, 64, "IO..."),
              new PixelFormat("yuva444p16le", 4, 64, "IO..."),
              new PixelFormat("vdpau", 0, 0, "..H.."),
              new PixelFormat("xyz12le", 3, 36, "IO..."),
              new PixelFormat("xyz12be", 3, 36, "IO..."),
              new PixelFormat("nv16", 3, 16, "....."),
              new PixelFormat("nv20le", 3, 20, "....."),
              new PixelFormat("nv20be", 3, 20, "....."),
              new PixelFormat("rgba64be", 4, 64, "IO..."),
              new PixelFormat("rgba64le", 4, 64, "IO..."),
              new PixelFormat("bgra64be", 4, 64, "IO..."),
              new PixelFormat("bgra64le", 4, 64, "IO..."),
              new PixelFormat("yvyu422", 3, 16, "IO..."),
              new PixelFormat("ya16be", 2, 32, "IO..."),
              new PixelFormat("ya16le", 2, 32, "IO..."),
              new PixelFormat("gbrap", 4, 32, "IO..."),
              new PixelFormat("gbrap16be", 4, 64, "IO..."),
              new PixelFormat("gbrap16le", 4, 64, "IO..."),
              new PixelFormat("qsv", 0, 0, "..H.."),
              new PixelFormat("mmal", 0, 0, "..H.."),
              new PixelFormat("d3d11va_vld", 0, 0, "..H.."),
              new PixelFormat("cuda", 0, 0, "..H.."),
              new PixelFormat("0rgb", 3, 24, "IO..."),
              new PixelFormat("rgb0", 3, 24, "IO..."),
              new PixelFormat("0bgr", 3, 24, "IO..."),
              new PixelFormat("bgr0", 3, 24, "IO..."),
              new PixelFormat("yuv420p12be", 3, 18, "IO..."),
              new PixelFormat("yuv420p12le", 3, 18, "IO..."),
              new PixelFormat("yuv420p14be", 3, 21, "IO..."),
              new PixelFormat("yuv420p14le", 3, 21, "IO..."),
              new PixelFormat("yuv422p12be", 3, 24, "IO..."),
              new PixelFormat("yuv422p12le", 3, 24, "IO..."),
              new PixelFormat("yuv422p14be", 3, 28, "IO..."),
              new PixelFormat("yuv422p14le", 3, 28, "IO..."),
              new PixelFormat("yuv444p12be", 3, 36, "IO..."),
              new PixelFormat("yuv444p12le", 3, 36, "IO..."),
              new PixelFormat("yuv444p14be", 3, 42, "IO..."),
              new PixelFormat("yuv444p14le", 3, 42, "IO..."),
              new PixelFormat("gbrp12be", 3, 36, "IO..."),
              new PixelFormat("gbrp12le", 3, 36, "IO..."),
              new PixelFormat("gbrp14be", 3, 42, "IO..."),
              new PixelFormat("gbrp14le", 3, 42, "IO..."),
              new PixelFormat("yuvj411p", 3, 12, "IO..."),
              new PixelFormat("bayer_bggr8", 3, 8, "I...."),
              new PixelFormat("bayer_rggb8", 3, 8, "I...."),
              new PixelFormat("bayer_gbrg8", 3, 8, "I...."),
              new PixelFormat("bayer_grbg8", 3, 8, "I...."),
              new PixelFormat("bayer_bggr16le", 3, 16, "I...."),
              new PixelFormat("bayer_bggr16be", 3, 16, "I...."),
              new PixelFormat("bayer_rggb16le", 3, 16, "I...."),
              new PixelFormat("bayer_rggb16be", 3, 16, "I...."),
              new PixelFormat("bayer_gbrg16le", 3, 16, "I...."),
              new PixelFormat("bayer_gbrg16be", 3, 16, "I...."),
              new PixelFormat("bayer_grbg16le", 3, 16, "I...."),
              new PixelFormat("bayer_grbg16be", 3, 16, "I...."),
              new PixelFormat("xvmc", 0, 0, "..H.."),
              new PixelFormat("yuv440p10le", 3, 20, "IO..."),
              new PixelFormat("yuv440p10be", 3, 20, "IO..."),
              new PixelFormat("yuv440p12le", 3, 24, "IO..."),
              new PixelFormat("yuv440p12be", 3, 24, "IO..."),
              new PixelFormat("ayuv64le", 4, 64, "IO..."),
              new PixelFormat("ayuv64be", 4, 64, "....."),
              new PixelFormat("videotoolbox_vld", 0, 0, "..H.."),
              new PixelFormat("p010le", 3, 15, "IO..."),
              new PixelFormat("p010be", 3, 15, "IO..."),
              new PixelFormat("gbrap12be", 4, 48, "IO..."),
              new PixelFormat("gbrap12le", 4, 48, "IO..."),
              new PixelFormat("gbrap10be", 4, 40, "IO..."),
              new PixelFormat("gbrap10le", 4, 40, "IO..."),
              new PixelFormat("mediacodec", 0, 0, "..H.."),
              new PixelFormat("gray12be", 1, 12, "IO..."),
              new PixelFormat("gray12le", 1, 12, "IO..."),
              new PixelFormat("gray10be", 1, 10, "IO..."),
              new PixelFormat("gray10le", 1, 10, "IO..."),
              new PixelFormat("p016le", 3, 24, "IO..."),
              new PixelFormat("p016be", 3, 24, "IO..."),
              new PixelFormat("d3d11", 0, 0, "..H.."),
              new PixelFormat("gray9be", 1, 9, "IO..."),
              new PixelFormat("gray9le", 1, 9, "IO..."),
              new PixelFormat("gbrpf32be", 3, 96, "....."),
              new PixelFormat("gbrpf32le", 3, 96, "....."),
              new PixelFormat("gbrapf32be", 4, 128, "....."),
              new PixelFormat("gbrapf32le", 4, 128, "....."),
              new PixelFormat("drm_prime", 0, 0, "..H.."),
              new PixelFormat("opencl", 0, 0, "..H.."),
              new PixelFormat("gray14be", 1, 14, "IO..."),
              new PixelFormat("gray14le", 1, 14, "IO..."),
              new PixelFormat("grayf32be", 1, 32, "IO..."),
              new PixelFormat("grayf32le", 1, 32, "IO..."),
              new PixelFormat("yuva422p12be", 4, 36, "IO..."),
              new PixelFormat("yuva422p12le", 4, 36, "IO..."),
              new PixelFormat("yuva444p12be", 4, 48, "IO..."),
              new PixelFormat("yuva444p12le", 4, 48, "IO..."),
              new PixelFormat("nv24", 3, 24, "IO..."),
              new PixelFormat("nv42", 3, 24, "IO..."))
          .build();
}
